﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace QrCoder
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            saveFileDialog1.FileName = "karekod.png";
            saveFileDialog1.Filter = "Tüm Dosyalar (*.*)|*.*";
        }

        private void buttonMake_Click(object sender, EventArgs e)
        {
            if (ValidateContent())
                CreateCode();
        }

        private void CreateCode()
        {
            string chrs = string.Empty;
            string chs = "150x150";
            string encoding = "UTF-8";

            Prepare(out chrs, out chs);
            pictureBox1.LoadAsync(string.Format("https://chart.googleapis.com/chart?chs={0}&cht=qr&chl={1}&choe={2}", chs, chrs, encoding));
        }

        private void Prepare(out string chrs, out string chs)
        {
            if (checkSMS.Checked)
                chrs = string.Format("SMSTO:{0}:{1}", editPhoneNumber.Text, textBox1.Text);
            else
                chrs = textBox1.Text;
            int height = Math.Min(pictureBox1.Width, pictureBox1.Height);
            chs = string.Format("{0}x{1}", height, height);
        }

        private void helpToolStripButton_Click(object sender, EventArgs e)
        {
            MessageBox.Show(@"Karekodunu oluşturmak istediğin içeriği üst tarafta bulunan metin alanına yapıştır ve 'Karekod Oluştur' butonuna tıkla.
Oluşturduğun bu karekodu; 
resim olarak kaydetmek istiyorsan 'Resmi Kaydet' butonu sayesinde kaydedebilir
kopyalayıp başka bir programda (paint vb) kullanmak istiyorsan 'Resmi Panoya Kopyala' butonu ile kopyalayabilirsin.", "QRCOder Hakkında", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void saveToolStripButton_Click(object sender, EventArgs e)
        {
            if (ValidateImage())
                SaveImage();
        }

        private void SaveImage()
        {
            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName);
            }
        }

        private bool ValidateContent()
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("Önce üstteki metin alanına bir içerik girmelisin!", "Kullanım Hatası (Olur böyle şeyler)", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            if (checkSMS.Checked && string.IsNullOrEmpty(editPhoneNumber.Text))
            {
                MessageBox.Show("Lütfen cep telefonunu giriniz!", "Kullanım Hatası (Olur böyle şeyler)", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            return true;
        }

        private bool ValidateImage()
        {
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("Önce bir içerik yazıp kardekounu oluşturmalısın!", "Kullanım Hatası (Olur böyle şeyler)", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }

            return true;
        }

        private void pasteToolStripButton_Click(object sender, EventArgs e)
        {
            if (ValidateImage())
            {
                Clipboard.SetImage(pictureBox1.Image);
                MessageBox.Show("Resim panoya kopyalandı. Şimdi istediğin bir programda fare ile sağ tuş->Yapıştır dediğinde ya da Ctrl + V tuşladığında resmi yapıştırabilirsin.", "Başarı Hikayesi", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void linkPaste_MouseMove(object sender, MouseEventArgs e)
        {
            linkPaste.Visible = HasText();
        }

        private void linkPaste_MouseLeave(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void linkPaste_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            textBox1.Text = Clipboard.GetText();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Stop();
            linkPaste.Visible = false;
        }

        private bool HasText()
        {
            return Clipboard.ContainsText();
        }

        private void checkSMS_CheckedChanged(object sender, EventArgs e)
        {
            editPhoneNumber.Visible = checkSMS.Checked;
            labelPhoneNumber.Visible = checkSMS.Checked;
        }

        private void feedbackToolStripButton_Click(object sender, EventArgs e)
        {
            Process.Start("mailto:alfabcsoft@gmail.com?subject=QRCoder Hakkında");
        }
    }
}
